%{

#include <iostream>
#include <string>

using namespace std; 

#include "nodo.h"
#include "parser.tab.h"

%}

%option yylineno
%option noyywrap

D			[0-9]
L			[a-zA-Z_]
%x                      comentario

%%
"//".*                  ;
"/*"                    BEGIN(comentario); 
<comentario>[^*\n]*
<comentario>"*"+[^*/\n]*
<comentario>\n
<comentario>"*"+"/"     BEGIN(INITIAL); 

"else"			{ return(ELSE); }
"if"			{ return(IF); }
"int"			{ return(INT); }
"char"			{ return(CHAR); }
"return"		{ return(RETURN); }
"void"			{ return(TVOID); }

{L}({L}|{D})*		{ yylval.nom = new string(yytext); return(IDENTIFICADOR); }

{D}+			{ yylval.ivalor = atoi(yytext); return(CTENT); }

L?'(\\.|[^\\'])+'	{  yylval.cvalor  = yytext[1];
			   return(CTCHAR); }


L?\"(\\.|[^\\"])*\"	{ yylval.nom = new string(yytext); return(LITERAL_ALFANUMERICO); }

"++"			{ return(INC_OP); }
"--"			{ return(DEC_OP); }
";"			{ return(';'); }
("{"|"<%")		{ return('{'); }
("}"|"%>")		{ return('}'); }
","			{ return(','); }
"="			{ return('='); }
"("			{ return('('); }
")"			{ return(')'); }
"-"			{ return('-'); }
"+"			{ return('+'); }
"*"			{ return('*'); }
"/"			{ return('/'); }
"%"			{ return('%'); }

[ \t\v\n\f]		;
.			{ cerr << "Error lexico, caracter (" << yytext << ") desconocido\n"; }

%%


